home *** CD-ROM | disk | FTP | other *** search
/ Whiteline: Alpha / Whiteline Alpha.iso / progtool / c / laserlib / inc / portab.h < prev    next >
Encoding:
C/C++ Source or Header  |  1994-09-22  |  21.4 KB  |  498 lines

  1. /**************************************************************************/
  2. /*                                                                        */
  3. /*  NAME:         portab.h                                                */
  4. /*                                                                        */
  5. /*  DATUM:        21.06.89                                                */
  6. /*                                                                        */
  7. /*  VERSION:      2.6                                                     */
  8. /*                                                                        */
  9. /*  BESCHREIBUNG: Deklaration von abstrakten Datentypen, wegen Portabi-   */
  10. /*                litaets-Verbesserung.                                   */
  11. /*                Wenn Symbol TESTTYPES vor dem Includen von portab.h     */
  12. /*                definiert wird, dann steht die Funktion testtypes()     */
  13. /*                zur Verfuegung, sie dient dem Anzeigen der aktuellen    */
  14. /*                Einstellungen und der Compiler-Typen-Groessen.          */
  15. /*                                                                        */
  16. /*  AENDERUNGEN:  CH210688 - Dokumentation.                               */
  17. /*                         - BOOL, STATIC, VOID hinzugefuegt.             */
  18. /*                CH240688 - Konstanten fuer bedingte Compilierung einge- */
  19. /*                           fuegt, an VAX und TNIX angepasst             */
  20. /*                CH270688 - XENIX angepasst                              */
  21. /*                CH300688 - an Megamax angepasst; Typenkontrolle erwei-  */
  22. /*                           tert;                                        */
  23. /*                CH010788 - an MSDOS angepasst.                          */
  24. /*                         - FLOAT und DOUBLE hinzugefuegt.               */
  25. /*                CH110888 - Konstante PORTAB definiert -> #ifdef PORTAB  */
  26. /*                         - NULF hinzugefuegt                            */
  27. /*                         - an gfadstd.h angepasst.                      */
  28. /*                CH020988 - an MSDOS und TURBOC angepasst.               */
  29. /*                CH071088 - zus. INT8 INT16 INT32 fuer machine.h         */
  30. /*                CH141088 - ifndef MSDOS eingebaut                       */
  31. /*                CH101188 - NULF, NULFB, NULFW, NULFL eingebaut          */
  32. /*                         - Anpassung an LaserC                          */
  33. /*                CH111188 - ifdef MEGAMAX, undef MEGAMAX eingefuegt      */
  34. /*                CH221188 - an MWC  angepasst.                           */
  35. /*                CH210189 - an TurboC auf Atari angepasst                */
  36. /*                CH130289 - Anzeige des Speichermodells unter Xenix      */
  37. /*                         - Anpassung an Digital Research Development    */
  38. /*                CH150289 - Sozobon Compiler angepasst, Test geaendert.  */
  39. /*                CH200289 - Anpassung an Minix V1.1.                     */
  40. /*                CH090689 - CPM hinzugefuegt.                            */
  41. /*                CH130689 - ST520 -> GEMDOS, UNIXV, MC68000, ...         */
  42. /*                CH210689 - um VARTYPE erweitert -> union                */
  43. /*                CH220689 - um Funktions-Pointer-Typen erweitert         */
  44. /*                                                                        */
  45. /**************************************************************************/
  46.  
  47. #ifndef PORTABH
  48. #define PORTABH
  49.  
  50. #ifdef MSDOS
  51. #undef MSDOS
  52. #endif MSDOS
  53. #ifdef MEGAMAX
  54. #undef MEGAMAX
  55. #endif MEGAMAX
  56.  
  57. /**************************************************************************/
  58. /*                                                                        */
  59. /*                         E I N S T E L L U N G E N                      */
  60. /*                                                                        */
  61. /**************************************************************************/
  62.  
  63. #define GEMDOS  1       /* Atari 520ST GEMDOS                             */
  64. #define VMS     0       /* MicroVAX VMS V4.4                              */
  65. #define TNIX    0       /* Tektronix Unix                                 */
  66. #define MSDOS   0       /* Msdos V3.3                                     */
  67. #define XENIX   0       /* Altos Xenix                                    */
  68. #define MINIX   0       /* Atari ST MINIX V1.1                            */
  69. #define CPM     0       /* CP/M 86                                        */
  70. #define UNIXV   0       /* UNIX System V                                  */
  71.  
  72. #define MC68000 1       /* Motorola 68000                                 */
  73. #define MC68020 0       /* Motorola 68020                                 */
  74. #define I8086   0       /* Intel 8086 / 8088                              */
  75. #define I80286  0       /* Intel 80286                                    */
  76. #define I80386  0       /* Intel 80386                                    */
  77.  
  78. #define LATTICE 0       /* LatticeC V3.04                                 */
  79. #define SYSCOMP 0       /* Systemcompiler                                 */
  80. #define MEGAMAX 0       /* MegamaxC V1.0                                  */
  81. #define LASERC  1       /* Megamax Laser C V1.0                           */
  82. #define MSC     0       /* Microsoft C                                    */
  83. #define TURBOC  0       /* Borland Turbo-C                                */
  84. #define MWC     0       /* Mark Williams C V3.0                           */
  85. #define DR      0       /* Digital Research Development                   */
  86. #define SC      0       /* Sozobon Compiler                               */
  87.  
  88. #define SMALLM  0       /* 8086 SmallModel                                */
  89. #define MIDDLEM 0       /* 8086 MiddleModel                               */
  90. #define LARGEM  0       /* 8086 LargeModell                               */
  91.  
  92. /**************************************************************************/
  93. /*                                                                        */
  94. /*                            A T A R I   S T                             */
  95. /*                                                                        */
  96. /**************************************************************************/
  97.  
  98. #if GEMDOS & LATTICE
  99. typedef char           BYTE;     /* signed 8 bit integer */
  100. typedef unsigned char  UBYTE;    /* unsigned 8 bit int   */
  101. typedef short          WORD;     /* signed 16 bit int    */
  102. typedef unsigned short UWORD;    /* unsigned 16 bit int  */
  103. typedef long           LONG;     /* signed 32 bit int    */
  104. typedef unsigned long  ULONG;    /* unsigned 32 bit int  */
  105. typedef float          FLOAT;
  106. typedef double         DOUBLE;
  107. typedef void           VOID;
  108. typedef UWORD          BOOL;
  109.  
  110. #define STATIC         static
  111. #define REGISTER       register
  112. #endif GEMDOS & LATTICE
  113.  
  114. #if GEMDOS & MWC
  115. typedef char           BYTE;     /* signed 8 bit integer */
  116. typedef unsigned char  UBYTE;    /* unsigned 8 bit int   */
  117. typedef short          WORD;     /* signed 16 bit int    */
  118. typedef unsigned short UWORD;    /* unsigned 16 bit int  */
  119. typedef long           LONG;     /* signed 32 bit int    */
  120. typedef unsigned long  ULONG;    /* unsigned 32 bit int  */
  121. typedef float          FLOAT;
  122. typedef double         DOUBLE;
  123. typedef void           VOID;
  124. typedef UWORD          BOOL;
  125.  
  126. #define STATIC         static
  127. #define REGISTER       register
  128. #endif GEMDOS & MWC
  129.  
  130. #if GEMDOS & SC
  131. typedef char           BYTE;     /* signed 8 bit integer */
  132. typedef unsigned char  UBYTE;    /* unsigned 8 bit int   */
  133. typedef short          WORD;     /* signed 16 bit int    */
  134. typedef unsigned short UWORD;    /* unsigned 16 bit int  */
  135. typedef long           LONG;     /* signed 32 bit int    */
  136. typedef unsigned long  ULONG;    /* unsigned 32 bit int  */
  137. typedef float          FLOAT;
  138. typedef double         DOUBLE;   /* double und float identisch!!! */
  139. typedef void           VOID;
  140. typedef UWORD          BOOL;
  141.  
  142. #define STATIC         static
  143. #define REGISTER       register
  144. #endif GEMDOS & SC
  145.  
  146. #if GEMDOS & TURBOC
  147. typedef char           BYTE;     /* signed 8 bit integer */
  148. typedef unsigned char  UBYTE;    /* unsigned 8 bit int   */
  149. typedef int            WORD;     /* signed 16 bit int    */
  150. typedef unsigned int   UWORD;    /* unsigned 16 bit int  */
  151. typedef long           LONG;     /* signed 32 bit int    */
  152. typedef unsigned long  ULONG;    /* unsigned 32 bit int  */
  153. typedef float          FLOAT;
  154. typedef double         DOUBLE;
  155. typedef void           VOID;
  156. typedef UWORD          BOOL;
  157.  
  158. #define STATIC         static
  159. #define REGISTER       register
  160. #endif GEMDOS & TURBOC
  161.  
  162. #if (GEMDOS & MEGAMAX) | (GEMDOS & LASERC)
  163. typedef char           BYTE;     /* signed 8 bit integer */
  164. typedef unsigned char  UBYTE;    /* unsigned 8 bit int   */
  165. typedef int            WORD;     /* signed 16 bit int    */
  166. typedef unsigned int   UWORD;    /* unsigned 16 bit int  */
  167. typedef long           LONG;     /* signed 32 bit int    */
  168. typedef unsigned long  ULONG;    /* unsigned 32 bit int  */
  169. typedef UWORD          BOOL;
  170. typedef float          FLOAT;
  171. typedef double         DOUBLE;
  172.  
  173. #define VOID
  174. #define STATIC
  175. #define REGISTER       register
  176. #endif (GEMDOS & MEGAMAX) | (GEMDOS & LASERC)
  177.  
  178. #if GEMDOS & DR
  179. typedef char           BYTE;     /* signed 8 bit integer */
  180. typedef char           UBYTE;    /* unsigned gibts nicht */
  181. typedef short          WORD;     /* signed 16 bit int    */
  182. typedef unsigned short UWORD;    /* unsigned 16 bit int  */
  183. typedef long           LONG;     /* signed 32 bit int    */
  184. typedef long           ULONG;    /* unsigned long gibts nicht  */
  185. typedef float          FLOAT;
  186. typedef double         DOUBLE;
  187. #define VOID
  188. typedef UWORD          BOOL;
  189.  
  190. #define STATIC         static
  191. #define REGISTER       register
  192. #endif GEMDOS & DR
  193.  
  194. /**************************************************************************/
  195. /*                                                                        */
  196. /*                              M I N I X                                 */
  197. /*                                                                        */
  198. /**************************************************************************/
  199.  
  200. #if MINIX & SYSCOMP
  201. typedef char           BYTE;     /* signed 8 bit integer */
  202. typedef unsigned char  UBYTE;    /* unsigned 8 bit int   */
  203. typedef short          WORD;     /* signed 16 bit int    */
  204. typedef unsigned short UWORD;    /* unsigned 16 bit int  */
  205. typedef long           LONG;     /* signed 32 bit int    */
  206. typedef unsigned long  ULONG;    /* unsigned 32 bit int  */
  207. typedef float          FLOAT;
  208. typedef double         DOUBLE;
  209. typedef void           VOID;
  210. typedef UWORD          BOOL;
  211.  
  212. #define STATIC         static
  213. #define REGISTER       register
  214. #endif XENIX & SYSCOMP
  215.  
  216. /**************************************************************************/
  217. /*                                                                        */
  218. /*                              M S D O S                                 */
  219. /*                                                                        */
  220. /**************************************************************************/
  221.  
  222. #if MSDOS & MSC
  223. typedef char           BYTE;     /* signed 8 bit integer */
  224. typedef unsigned char  UBYTE;    /* unsigned 8 bit int   */
  225. typedef short          WORD;     /* signed 16 bit int    */
  226. typedef unsigned short UWORD;    /* unsigned 16 bit int  */
  227. typedef long           LONG;     /* signed 32 bit int    */
  228. typedef unsigned long  ULONG;    /* unsigned 32 bit int  */
  229. typedef UWORD          BOOL;
  230. typedef float          FLOAT;
  231. typedef double         DOUBLE;
  232.  
  233. #define VOID           WORD
  234. #define STATIC         static
  235. #define REGISTER       register
  236. #endif MSDOS & MSC
  237.  
  238. #if MSDOS & TURBOC
  239. typedef char           BYTE;     /* signed 8 bit integer */
  240. typedef unsigned char  UBYTE;    /* unsigned 8 bit int   */
  241. typedef short          WORD;     /* signed 16 bit int    */
  242. typedef unsigned short UWORD;    /* unsigned 16 bit int  */
  243. typedef long           LONG;     /* signed 32 bit int    */
  244. typedef unsigned long  ULONG;    /* unsigned 32 bit int  */
  245. typedef float          FLOAT;
  246. typedef double         DOUBLE;
  247. typedef void           VOID;
  248. typedef UWORD          BOOL;
  249.  
  250. #define STATIC         static
  251. #define REGISTER       register
  252. #endif MSDOS & TURBOC
  253.  
  254. /**************************************************************************/
  255. /*                                                                        */
  256. /*                                V M S                                   */
  257. /*                                                                        */
  258. /**************************************************************************/
  259.  
  260. #if VMS & SYSCOMP
  261. typedef char           BYTE;     /* signed 8 bit integer */
  262. typedef unsigned char  UBYTE;    /* unsigned 8 bit int   */
  263. typedef short          WORD;     /* signed 16 bit int    */
  264. typedef unsigned short UWORD;    /* unsigned 16 bit int  */
  265. typedef long           LONG;     /* signed 32 bit int    */
  266. typedef unsigned long  ULONG;    /* unsigned 32 bit int  */
  267. typedef UWORD          BOOL;
  268. typedef float          FLOAT;
  269. typedef double         DOUBLE;
  270.  
  271. #define VOID           void
  272. #define STATIC         static
  273. #define REGISTER       register
  274. #endif VMS & SYSCOMP
  275.  
  276. /**************************************************************************/
  277. /*                                                                        */
  278. /*                                T N I X                                 */
  279. /*                                                                        */
  280. /**************************************************************************/
  281.  
  282. #if TNIX & SYSCOMP
  283. typedef char           BYTE;     /* signed 8 bit integer */
  284. typedef BYTE           UBYTE;    /* unsigned 8 bit int   */
  285. typedef int            WORD;     /* signed 16 bit int    */
  286. typedef unsigned int   UWORD;    /* unsigned 16 bit int  */
  287. typedef long           LONG;     /* signed 32 bit int    */
  288. typedef LONG           ULONG;    /* unsigned 32 bit int  */
  289. typedef UWORD          BOOL;
  290. typedef float          FLOAT;
  291. typedef double         DOUBLE;
  292.  
  293. #define VOID           /* void */
  294. #define STATIC         static
  295. #define REGISTER       register
  296. #endif TNIX & SYSCOMP
  297.  
  298. /**************************************************************************/
  299. /*                                                                        */
  300. /*                                X E N I X                               */
  301. /*                                                                        */
  302. /**************************************************************************/
  303.  
  304. #if XENIX & SYSCOMP & (SMALLM | MIDDLEM | LARGEM) 
  305. typedef char           BYTE;     /* signed 8 bit integer */
  306. typedef BYTE           UBYTE;    /* unsigned 8 bit int   */
  307. typedef int            WORD;     /* signed 16 bit int    */
  308. typedef unsigned int   UWORD;    /* unsigned 16 bit int  */
  309. typedef long           LONG;     /* signed 32 bit int    */
  310. typedef LONG           ULONG;    /* unsigned 32 bit int  */
  311. typedef UWORD          BOOL;
  312. typedef float          FLOAT;
  313. typedef double         DOUBLE;
  314.  
  315. #define VOID           /* void */
  316. #define STATIC         static
  317. #define REGISTER       register
  318. #endif XENIX & SYSCOMP & (SMALLM | MIDDLEM | LARGEM)
  319.  
  320. /**************************************************************************/
  321. /*                                                                        */
  322. /*                  S T A N D A R D - D E F I N I T I O N E N             */
  323. /*                                                                        */
  324. /**************************************************************************/
  325.  
  326. #ifdef TRUE
  327. #undef TRUE
  328. #endif TRUE
  329.  
  330. #ifdef FALSE
  331. #undef FALSE
  332. #endif FALSE
  333.  
  334. #define TRUE          (1)
  335. #define FALSE         (0)
  336. #define OK            (0)
  337. #define ERROR         (-1)
  338.  
  339. #define NULP          ((BYTE *) 0)
  340. #define NULFB         ((BOOL (*) ()) 0)
  341. #define NULFW         ((WORD (*) ()) 0)
  342. #define NULFL         ((LONG (*) ()) 0)
  343. #define NULFF         ((FLOAT (*) ()) 0)
  344. #define NULFD         ((DOUBLE (*) ()) 0)
  345. #define NULFS         ((BYTE * (*) ()) 0)
  346.  
  347. #define NULF          NULFS
  348.  
  349.  /* Anpassung an gfadstd.h */
  350.  
  351. typedef BYTE          CHAR;
  352. typedef BYTE          *STRING;       /* oder (BYTE *) STRING; */
  353. typedef BYTE          *STR;
  354. typedef WORD          INT;
  355. typedef UWORD         UINT;
  356.  
  357.  /* Anpassung an machine.h (Vorgaenger von portab.h) */
  358.  
  359. typedef BYTE          INT8;
  360. typedef UBYTE         UINT8;
  361. typedef WORD          INT16;
  362. typedef UWORD         UINT16;
  363. typedef LONG          INT32;
  364. typedef ULONG         UINT32;
  365.  
  366. typedef union _vartype
  367. {
  368.    BYTE    chr;
  369.    WORD    wrd;
  370.    FLOAT   flt;
  371.    LONG    lng;
  372.    ULONG   ulng;
  373.    DOUBLE  dbl;
  374.    STR    *str;
  375. } VARTYPE;
  376.  
  377. /**************************************************************************/
  378. /*                                                                        */
  379. /*               Z E I G E R   A U F   F U N K T I O N E N                */
  380. /*                                                                        */
  381. /**************************************************************************/
  382.  
  383. typedef WORD (*PFWORD) ();          /* Ptr a. Func mit Ret = WORD         */
  384. typedef WORD *(*PFPWORD) ();        /* Ptr a. Func mit Ret = Ptr auf WORD */
  385. typedef WORD (*(*PFPFWORD)()) ();   /* " " "  Ret = Ptr auf Func WORD     */
  386. typedef WORD *(*(*PFPFPWORD)()) (); /* " " " Ret = Ptr auf Func Ptr WORD  */
  387. typedef BOOL (*PFBOOL) ();
  388. typedef STR  (*PFSTR) ();
  389.  
  390. /**************************************************************************/
  391. /*                                                                        */
  392. /*  NAME:         VOID testtypes ()                                       */
  393. /*                                                                        */
  394. /*  DATUM:        13.02.89                                                */
  395. /*                                                                        */
  396. /*  BESCHREIBUNG: Gibt die aktuellen Einstellungen der internen und der   */
  397. /*                Compiler-Datentypen aus.                                */
  398. /*                                                                        */
  399. /**************************************************************************/
  400.  
  401. #ifdef TESTTYPES
  402. VOID testtypes ()
  403. {
  404.    printf ("            -----------------------------------------\n");
  405.    printf ("            Test der abstrakten Datentypen (portab.h)\n");
  406.    printf ("            -----------------------------------------\n");
  407.    printf ("\ninterne Systemkonfiguration:\n");
  408.    printf ("----------------------------\n\n");
  409. #if VMS
  410.    printf ("System: VMS  ");
  411. #endif VMS
  412. #if GEMDOS
  413.    printf ("System: GEMDOS  ");
  414. #endif GEMDOS
  415. #if MSDOS
  416.    printf ("System: MSDOS  ");
  417. #endif MSDOS
  418. #if TNIX
  419.    printf ("System: TNIX  ");
  420. #endif TNIX
  421. #if XENIX
  422.    printf ("System: XENIX  ");
  423. #endif XENIX
  424. #if MINIX
  425.    printf ("System: MINIX  ");
  426. #endif MINIX
  427.  
  428. #if XENIX | MSDOS
  429. #if SMALLM
  430.    printf ("Model: SMALL  ");
  431. #endif SMALLM
  432. #if MIDDLEM
  433.    printf ("Model: MIDDLEM  ");
  434. #endif MIDDLEM
  435. #if LARGEM
  436.    printf ("Model: LARGEM  ");
  437. #endif LARGEM
  438. #endif XENIX | MSDOS
  439.  
  440. #if LATTICE
  441.    printf ("Compiler: LATTICE\n");
  442. #endif LATTICE
  443. #if MWC
  444.    printf ("Compiler: MWC\n");
  445. #endif MWC
  446. #if MSC
  447.    printf ("Compiler: MSC\n");
  448. #endif MSC
  449. #if MEGAMAX
  450.    printf ("Compiler: MEGAMAX\n");
  451. #endif MEGAMAX
  452. #if LASERC
  453.    printf ("Compiler: LASERC\n");
  454. #endif LASERC
  455. #if SYSCOMP
  456.    printf ("Compiler: SYSCOMP\n");
  457. #endif SYSCOMP
  458. #if TURBOC
  459.    printf ("Compiler: TURBOC\n");
  460. #endif TURBOC
  461. #if DR
  462.    printf ("Compiler: DR\n");
  463. #endif DR
  464. #if SC
  465.    printf ("Compiler: SC\n");
  466. #endif SC
  467.  
  468.    printf ("\nGroesse der internen Datentypen:\n");
  469.    printf ("--------------------------------\n\n");
  470.    printf ("char:   %d      CHAR:   %d    %s\n",
  471.            (unsigned int) sizeof (char), (unsigned int) sizeof (CHAR),
  472.            ((unsigned int) sizeof (char) != (unsigned int) sizeof (CHAR) ?
  473.            "!!! Achtung Typen unterschiedliche Groesse !!!" : ""));
  474.    printf ("short:  %d\n", (unsigned int) sizeof (short));
  475.    printf ("long:   %d      LONG:   %d    %s\n",
  476.            (unsigned int) sizeof (long), (unsigned int) sizeof (LONG),
  477.            ((unsigned int) sizeof (long) != (unsigned int) sizeof (LONG) ?
  478.            "!!! Achtung Typen unterschiedliche Groesse !!!" : ""));
  479.    printf ("int:    %d      WORD:   %d    %s\n",
  480.            (unsigned int) sizeof (int), (unsigned int) sizeof (WORD),
  481.            ((unsigned int) sizeof (int) != (unsigned int) sizeof (WORD) ?
  482.            "!!! Achtung Typen unterschiedliche Groesse !!!" : ""));
  483.    printf ("float:  %d      FLOAT:  %d    %s\n",
  484.            (unsigned int) sizeof (float), (unsigned int) sizeof (FLOAT),
  485.            ((unsigned int) sizeof (float) != (unsigned int) sizeof (FLOAT) ?
  486.            "!!! Achtung Typen unterschiedliche Groesse !!!" : ""));
  487.    printf ("double: %d      DOUBLE: %d    %s\n",
  488.            (unsigned int) sizeof (double), (unsigned int) sizeof (DOUBLE),
  489.            ((unsigned int) sizeof (double) != (unsigned int) sizeof (DOUBLE) ?
  490.            "!!! Achtung Typen unterschiedliche Groesse !!!" : ""));
  491.    printf ("               UBYTE:  %d\n", (unsigned int) sizeof (UBYTE));
  492.    printf ("               UWORD:  %d\n", (unsigned int) sizeof (UWORD));
  493.    printf ("               ULONG:  %d\n", (unsigned int) sizeof (ULONG));
  494. }
  495. #endif TESTTYPE
  496. #endif PORTABH
  497.  
  498.